﻿using System;
using System.Windows.Forms;
using Logic;
using System.Threading;
using System.Collections.Generic;
using ViewModel;

namespace SampleDB
{
    /// <summary>
    /// SampleDBクラス
    /// </summary>
    public partial class HelthManager : Form
    {

        public HelthManager()
        {
            InitializeComponent();
        }

        #region イベント
        /// <summary>
        /// ロード時イベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>z
        private void SampleDB_Load(object sender, EventArgs e)
        {
            // GridDataの設定
            //SetGridData();
            LoadGridData();
        }

        /// <summary>
        /// 登録ボタン押下時処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRegist_Click(object sender, EventArgs e)
        {
            var logic = new SampleDBLogic();
            // データ登録をする
            //logic.Regist(txtContents.Text);
            // データ登録をする
            //logic.Regist(txtContents.Text, textHight.Text, textWight.Text,textSleepTime.Text,textBP_high.Text,textBP_low.Text);
            logic.Regist(textHight.Text, textWight.Text);

            // GridDataの再設定
            //SetGridData();
            LoadGridData();


            // テキストをクリアする
            textHight.Text = String.Empty;
            textWight.Text = String.Empty;
            textSleepTime.Text = String.Empty;
            textBP_high.Text = String.Empty;
            textBP_low.Text = String.Empty;
        }

        #endregion

        #region private
        /// <summary>
        /// GridDataの読み込み処理
        /// </summary>
        private void LoadGridData()
        {
            // GridDataの設定
            Thread thread = new Thread(new ThreadStart(SetGridData));
            thread.Start();
        }

        /// <summary>
        /// Gridにデータを設定する
        /// </summary>
        private void SetGridData()
        {
            var logic = new SampleDBLogic();
            // データを取得する
            var dataList = logic.GetData();

            BindingSource bs = new BindingSource();
            if (dataList != null && dataList.Count > 0)
            {
                foreach (var item in dataList)
                {
                    bs.Add(item);
                }
            }

            // GridDataをバインドする
            BindingGridData(bs);
        }

        delegate void BindingGridDataDelegate(BindingSource bs);
        /// <summary>
        /// GridDataをバインドする
        /// </summary>
        /// <param name="bs"></param>
        private void BindingGridData(BindingSource bs)
        {
            // UIスレッド以外から呼ばれた場合
            if (InvokeRequired)
            {
                Invoke(new BindingGridDataDelegate(BindingGridData), bs);
                return;
            }

            grdHelth.DataSource = bs;
            foreach (DataGridViewRow row in grdHelth.Rows)
            {
                grdHelth.Rows[row.Index].Cells["colDammyID"].Value = row.Index+1;
            }
        }

        #endregion

        /// <summary>
        /// 更新処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnupdate_Click(object sender, EventArgs e)
        {
            //LoadUpdateRecord();
            UpdateRecord();
            // GridDataの再設定
            LoadGridData();

        }

        // 削除ボタン
        /// <summary>
        /// 削除処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //選択されている行を表示
             var logic = new SampleDBLogic();
            //データ削除をする
            logic.Delete(textid.Text);

            // GridDataの再設定
            LoadGridData();
        }

        /// <summary>
        /// スレッド処理(削除)
        /// </summary>
        private void LoadDeleteRecord()
        {
            // スレッドの設定
            Thread thread = new Thread(new ThreadStart(DeleteRecord));
            thread.Start();
        }

        /// <summary>
        /// レコード削除処理
        /// </summary>
        private void DeleteRecord()
        {
            var logic = new SampleDBLogic();
            logic.Delete(textid.Text);
        }

        /// <summary>
        /// スレッド処理(更新)
        /// </summary>
        private void LoadUpdateRecord()
        {
            // スレッドの設定
            Thread loadthread = new Thread(new ThreadStart(UpdateRecord));
            loadthread.Start();
        }

        /// <summary>
        /// レコード更新処理
        /// </summary>
        private void UpdateRecord()
        {
            var logic = new SampleDBLogic();
            //// データ更新をする
            logic.update(textid.Text, textHight.Text, textWight.Text);
        }

        /// <summary>
        /// スレッド処理(登録)
        /// </summary>
        private void LoadInsertRecord()
        {
            // スレッドの設定
            Thread thread = new Thread(new ThreadStart(InsertRecord));
            thread.Start();
        }

        /// <summary>
        /// レコード登録処理
        /// </summary>
        private void InsertRecord()
        {
            var logic = new SampleDBLogic();
            // データ登録をする
            logic.Regist(textHight.Text, textWight.Text);
        }

    }
}
